import { OSS_URL } from '@/utils/config'
import { getToken } from '@/utils/auth'
// 获取OSS图片
export function getOSSImg(path) {
	return `${OSS_URL}/images/${path}`
}

// 返回昨日，今日，本周，本旬，本月，开始与结束时间戳
export const getDateTimestamp = {
	// 初始化实例
	getDates() {
		let _Date = new Date();
		// 获取年份
		let _Year = _Date.getFullYear();
		// 获取月份
		let _Month = _Date.getMonth();
		// 获取今天本周的第几天 返回值是 0（周日） 到 6（周六） 之间的一个整数。0||7为7，即weekday的值为1-7
		let _Day = _Date.getDay() || 7;
		// 获取今天日期
		let _Today = _Date.getDate();
		return { _Date, _Year, _Month, _Day, _Today };
	},
	// 返回今日开始-结束时间戳
	getTodayStartEndTimestamp() {
		let { _Date } = this.getDates();
		// 今日0点
		let start = _Date.setHours(0, 0, 0, 0) / 1000;
		// 今日23:59:59
		let end = _Date.setHours(23, 59, 59, 0) / 1000;
		return { start_time: start, end_time: end }
	},
	// 返回明日开始-结束时间戳
	getTomorrowStartEndTimestamp() {
		let { _Date } = this.getDates();
		// 明日0点
		let start = _Date.setHours(+24, 0, 0, 0) / 1000;
		// 明日23:59:59
		let end = _Date.setHours(23, 59, 59, 0) / 1000;
		return { start_time: start, end_time: end }
	},
	// 返回昨日开始-结束时间戳
	getYesterdayStartEndTimestamp() {
		let { _Date } = this.getDates();
		let start = _Date.setHours(-24, 0, 0, 0) / 1000;
		let end = _Date.setHours(23, 59, 59, 0) / 1000;
		return { start_time: start, end_time: end }
	},
	// 返回本周开始-结束时间戳
	getWeekStartEndTimestamp() {
		let { _Date, _Day, _Today } = this.getDates();
		// 本周第一天0点
		let num = _Today - _Day + 1; //往前算（weekday-1）天，年份、月份会自动变化
		_Date.setDate(num);
		let start = _Date.setHours(0, 0, 0, 0) / 1000;
		// 本周最后一天23:59:59
		_Date.setDate(_Date.getDate() + 6);
		let end = _Date.setHours(23, 59, 59, 0) / 1000;
		return { start_time: start, end_time: end };
	},
	// 本月开始-结束时间时间戳
	getMonthStartEndTimestamp() {
		const { _Year, _Month } = this.getDates()
		// 本月第一天0点
		const start = new Date(_Year, _Month, 1).getTime() / 1000
		// 本月最后一天23:59:59
		const end = new Date(_Year, _Month + 1, 0).setHours(23, 59, 59, 0) / 1000

		return { start_time: start, end_time: end }
	},
	// 本旬开始-结束时间时间戳
	getQuarterStartEndTimestamp() {
		let { _Year, _Month, _Today } = this.getDates();
		let monthStartDate = new Date(_Year, _Month, 1);
		let monthEndDate = new Date(_Year, _Month + 1, 1);
		// // 本月最后一天日期
		let end_day = (monthEndDate - monthStartDate) / (1000 * 60 * 60 * 24);
		let start;
		let end;
		if (1 <= _Today && _Today <= 10) {
			// 上旬第一天0点
			start = new Date(_Year, _Month, 1).getTime() / 1000;
			// 上旬最后一天23:59:59
			end = new Date(_Year, _Month, 10).setHours(23, 59, 59, 0) / 1000;
			// console.log('上旬');
		} else if (11 <= _Today && _Today <= 20) {
			// 中旬开始-结束时间时间戳
			start = new Date(_Year, _Month, 11).getTime() / 1000;
			end = new Date(_Year, _Month, 20).setHours(23, 59, 59, 0) / 1000;
			// console.log('中旬');
		} else if (21 <= _Today && _Today <= end_day) {
			// 下旬开始-结束时间时间戳
			start = new Date(_Year, _Month, 21).getTime() / 1000;
			end = new Date(_Year, _Month, end_day).setHours(23, 59, 59, 0) / 1000;
			// console.log('下旬');
		}
		return { start_time: start, end_time: end };
	},
	// 本年开始-结束时间时间戳
	getYearStartEndTimestamp() {
		const { _Year } = this.getDates()
		// 本年第一天0点
		const start = new Date(_Year, 0, 1).getTime() / 1000
		// 本年最后一天23:59:59
		const end = new Date(_Year, 12, 0).setHours(23, 59, 59, 0) / 1000

		return { start_time: start, end_time: end }
	},
	// 全部开始-结束时间时间戳
	getAllStartEndTimestamp(){
		let { _Date } = this.getDates();
		// 今日0点
		let start = 1;
		// 今日当前时间戳
		let end = parseInt(_Date.getTime() / 1000);
		return { start_time: start, end_time: end }
	}
}

// 是否为空
export function isEmpty(value) {
	if (isArray(value)) {
		return value.length === 0;
	}

	if (isObject(value)) {
		return Object.keys(value).length === 0;
	}

	return value === "" || value === undefined || value === null;
}

// 是否Array类型
export function isArray(value) {
	if (typeof Array.isArray === "function") {
		return Array.isArray(value);
	} else {
		return Object.prototype.toString.call(value) === "[object Array]";
	}
}

// 是否Object类型
export function isObject(value) {
	return Object.prototype.toString.call(value) === "[object Object]";
}


/**
 * 获取父级节点
 * @param {*} name componentName
 * @param {*} keys 保留的参数，避免 computed 非 H5 解析失败
 */
export function getParent(name, keys) {
	let parent = this.$parent;

	while (parent) {
		if (parent.$options.componentName !== name) {
			parent = parent.$parent;
		} else {
			return keys.reduce((result, key) => {
				result[key] = parent[key];
				return result;
			}, {});
		}
	}

	return null;
}

/**
* 参数处理
* @param params 参数
*/
export function tansParams(params) {
  let result = ''
  for (const propName of Object.keys(params)) {
    const value = params[propName]
    var part = encodeURIComponent(propName) + "="
    if (value !== null && value !== "" && typeof (value) !== "undefined") {
      if (typeof value === 'object') {
        for (const key of Object.keys(value)) {
          if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') {
            let params = propName + '[' + key + ']'
            var subPart = encodeURIComponent(params) + "="
            result += subPart + encodeURIComponent(value[key]) + "&"
          }
        }
      } else {
        result += part + encodeURIComponent(value) + "&"
      }
    }
  }
  return result
}

/*
	找出数组中重复数字
	先排序，再通过遍历比较，若相等，则添加到结果数组中，最后对结果数组进行去重，即可得到结果。
*/
export function getSameNum(Arr) {
	let result = [];//用于保存最后的结果
	//排序
	let arr = Arr.sort(function (a, b) {
			return a - b;//increse
	});
	//由于每次遍历访问Arr.length都是需要重复执行的，因此保存到len，提高效率
	let len = Arr.length;
	//遍历比较，看是否有相同的数字
	for (let i = 0; i < len - 1; i++) {
			if (Arr[i] === Arr[i + 1]) {
					result.push(Arr[i]);
			}
	}
	//去重，防止有三个相同的时，会多push一个相同数字
	return Array.from(new Set(result));
}

/**小程序码 解析scene
 * @params scene
 */
export function sceneDecode(scene) {
  const decodeQueryText = decodeURIComponent(scene)
  const new_query = {}
  // 解析为对象
  decodeQueryText.split('&').map(v => {
    let arr = v.split('=')
    new_query[arr[0]] = arr[1] || ''
  })
	return new_query
}

/**
 * 检查是否是第二天
 */
export function isNextDay(next, current) {
	let date = new Date(current)
	date.setDate(date.getDate() + 1)
	return (date.getFullYear() === next.getFullYear()) && (date.getMonth() === next.getMonth()) && (date.getDate() === next.getDate())
}
